"""
https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/

82. 删除排序链表中的重复元素 II
已解答
中等
相关标签
premium lock icon
相关企业
给定一个已排序的链表的头 head ， 删除原始链表中所有重复数字的节点，只留下不同的数字 。返回 已排序的链表 。

 

示例 1：


输入：head = [1,2,3,3,4,4,5]
输出：[1,2,5]
示例 2：


输入：head = [1,1,1,2,3]
输出：[2,3]
 

提示：

链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序 排列

"""


# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
from typing import Optional
from list_node import ListNode,calc_arr,create_list_node


class Solution:
    """
    一种思路是，遍历节点时，判断next和next.next是否存在：
    如果不存在，则直接返回;
    如果存在，则判断二者是否相等。相等则标记为重复数，并继续向下遍历

    """
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        root=ListNode(101,head)
        
        cur=root
        while cur.next:
            if not cur.next.next:
                break
            if cur.next.val!=cur.next.next.val:
                cur=cur.next
                continue
            dup_num=cur.next.val
            cur.next=cur.next.next.next
            while cur.next and cur.next.val==dup_num:
                cur.next=cur.next.next
            
        return root.next

if __name__=='__main__':
    nums=[1,1,1,2,3]
    head=create_list_node(nums)

    sol=Solution()
    res=sol.deleteDuplicates(head)
    print(calc_arr(res))

    pass